socket编程(C++)报错 'inet 您所在的位置:网站首页 inet addr和ip socket编程(C++)报错 'inet

socket编程(C++)报错 'inet

#socket编程(C++)报错 'inet| 来源: 网络整理| 查看: 265

背景(简单的socket编程,使用C++实现TCP通讯时报错 错误 C4996 ‘inet_addr’: Use inet_pton() or InetPton() instead or define WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings server,VS2015套接字编程时error C4996错误处理链接中3个处理方法都不行)

环境(VS 2019,Win 10)

先直接放解决方案: 所以在IP地址赋值时, ①sockAddr.sin_addr.s_addr=htonl(2130706433); ②sockAddr.sin_addr.s_addr=16777343; ③sockAddr.sin_addr.s_addr=inet_addr(“127.0.0.1”); 以上3句完全一样!

所以将报错语句由③改①或者②即可。但是该方法也只是绕过了这个坑,这个问题暂时还未完全解决。

由此引起的知识学习以及整理:

参考资料: 链接1:简单的TCP通讯——服务器向客户端发送信息,客户端接受信息(直接使用代码会报标题的错) 链接2:简单的TCO通讯——服务器向客户端发送信息,客户端接受后回复信息(直接使用代码client端服务器连接失败) 链接3:C++ socket编程指南——基础,通俗易懂但是读起来很奇怪的外文翻译 链接4:网络字节序与主机字节序的转换

socket通讯在代码中怎么实现呢? //创建套接字 SOCKET serSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //配置socket地址 sockaddr_in sockAddr; 完成以上过程后,socket配置完成——完成了下图中的第一步 socket() 本文只讨论这一步 socket工作流程 socket怎么配置呢?我们先来看以下变量 SOCKET /* * The new type to be used in all * instances which refer to sockets. */ typedef UINT_PTR SOCKET;//宏定义 typedef unsigned int UINT_PTR, *PUINT_PTR;//宏定义

配置方法:

//创建套接字 SOCKET s_server; s_server = socket(AF_INET, SOCK_STREAM, 0); sockaddr 这个结构体是最基础的,但是难以使用,在这篇文章中不重要,代码如下: /* * Structure used by kernel to store most * addresses. */ struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; sa_family 是地址族,在这里我暂时只用 “AF_INET”(网络协议版本4,即IPv4地址系列)。sa_data包含套接字中的目标地址和端口信息,是所有不同套接字地址结构的最大大小。配置方法:我母鸡啊。 3.sockaddr_in 上面那个结构体基础,但是难用,所以有了这个结构体sockaddr_in(这个结构体在本文中很重要),代码如下: /* * Socket address, internet style. */ struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

配置方法:

//socket的地址信息 sockaddr_in sockAddr; memset(&sockAddr, 0, sizeof(sockAddr)); //用0填充每一个字节 sockAddr.sin_family = AF_INET; //使用IPv4地址 sockAddr.sin_addr.s_addr = htonl(2130706433); //具体的ip地址 sockAddr.sin_port = htons(1234); //具体的端口号 socket中IP地址怎么填 那么关于IP地址,IP地址有两种表达方式,点分十进制和整型。 127.0.0.1——这种表示方法叫点分十进制 2130706433——这种表示方法叫整形,他是IP地址127.0.0.1的主机字节序表示方法 16777343——这种表示方法也叫整形,他是IP地址127.0.0.1的网络字节序表示方法 ping指令 如图,我在ping 2130706433时,命令行会给我ping到127.0.0.1。 “点分十进制“,“网络字节序”和“主机字节序”,这三者的转换方式如下: 该图片来自链接4 用于转换的函数: 所以在IP地址赋值时, ①sockAddr.sin_addr.s_addr=htonl(2130706433); ②sockAddr.sin_addr.s_addr=16777343; ③sockAddr.sin_addr.s_addr=inet_addr(“127.0.0.1”); 以上3句完全一样!

所以将报错语句由③改①或者②即可。但是该方法也只是绕过了这个坑,这个问题暂时还未完全解决,等我再去学一学网络编程回头再来看这个问题!2019年6月7日



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有